package ar.edu.uade.fain.ad.test.server.controller;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

import ar.edu.uade.fain.ad.test.common.dto.ContratoDTO;
import ar.edu.uade.fain.ad.test.common.dto.CoordinadorDTO;
import ar.edu.uade.fain.ad.test.common.remote.SistemaService;
import ar.edu.uade.fain.ad.test.server.business.ContratoBO;
import ar.edu.uade.fain.ad.test.server.business.CoordinadorBO;
import ar.edu.uade.fain.ad.test.server.business.IntegranteBO.SexoBO;
import ar.edu.uade.fain.ad.test.server.dao.ContratoDAO;
import ar.edu.uade.fain.ad.test.server.dao.CoordinadorDAO;
import ar.edu.uade.fain.ad.test.server.dao.hibernate.ContratoHibernateDAO;
import ar.edu.uade.fain.ad.test.server.dao.hibernate.CoordinadorHibernateDAO;

public class SistemaServiceBean 
		extends UnicastRemoteObject
		implements SistemaService {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private ContratoDAO contratoDAO;

	private CoordinadorDAO coordinadorDAO;

	public SistemaServiceBean() throws RemoteException {
		super();
		setContratoDAO(new ContratoHibernateDAO());
		setCoordinadorDAO(new CoordinadorHibernateDAO());
	}

	public ContratoDAO getContratoDAO() {
		return contratoDAO;
	}

	public void setContratoDAO(ContratoDAO contratoDAO) {
		this.contratoDAO = contratoDAO;
	}

	public CoordinadorDAO getCoordinadorDAO() {
		return coordinadorDAO;
	}

	public void setCoordinadorDAO(CoordinadorDAO coordinadorDAO) {
		this.coordinadorDAO = coordinadorDAO;
	}

	@Override
	public ContratoDTO getContratoDeDesarrolladorConMayorConvenio()
			throws RemoteException {
		final ContratoBO bo = getContratoDAO().buscarDesarrolladorConMayorConvenio();
		return map(bo);
	}

	private ContratoDTO map(ContratoBO bo) {
		return bo.createDTO();
	}

	@Override
	public List<CoordinadorDTO> getCoordinadorasEnImplementacionYControl()
			throws RemoteException {
		final HashSet<String> funciones = 
				new HashSet<String>(Arrays.asList(
						new String[] {"IMPLEMENTACION", "CONTROL"}));
		final List<CoordinadorBO> bos = 
				getCoordinadorDAO().buscarCoordinadores(
						SexoBO.FEMENINO, funciones);
		final ArrayList<CoordinadorDTO> dtos = new ArrayList<CoordinadorDTO>();
		for (CoordinadorBO bo : bos) {
			dtos.add(map(bo));
		}
		return dtos;
	}

	private CoordinadorDTO map(CoordinadorBO bo) {
		return bo.createDTO();
	}

	
}
